﻿Imports ThoughtWorks.QRCode
Imports ThoughtWorks.QRCode.Codec
Imports ThoughtWorks.QRCode.Codec.Data
Imports DevComponents.DotNetBar.Metro
Imports DevComponents.DotNetBar
Imports System.IO
Imports System.Text

Public Class FrmCapturaServicio
    Dim g As Guid
    Dim fila, fila_propro As Integer

    Private Sub AtrasBtn_Click(sender As Object, e As EventArgs) Handles AtrasBtn.Click
        If PageSlider1.SelectedPageIndex = 0 Then
            FrmCatalogo.Show()
            _EnTarea = False
            _Editar = False
            Me.Close()
        Else
            PageSlider1.SelectedPageIndex = PageSlider1.SelectedPageIndex - 1
        End If
    End Sub

    Private Sub FrmCapturaServicio_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       
        Try
            'Retira el uso de constraints
            Me.DataSet_Prod_Serv.EnforceConstraints = False

            'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Productos_Proveedor' Puede moverla o quitarla según sea necesario.
            Me.Productos_ProveedorTableAdapter.Fill(Me.DataSet_Prod_Serv.Productos_Proveedor)
            'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Productos_Proveedor' Puede moverla o quitarla según sea necesario.
            Me.Productos_ProveedorTableAdapter.Fill(Me.DataSet_Prod_Serv.Productos_Proveedor)
            'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Almacenes' Puede moverla o quitarla según sea necesario.
            Me.AlmacenesTableAdapter.Fill(Me.DataSet_Prod_Serv.Almacenes)
            'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Unidades' Puede moverla o quitarla según sea necesario.
            Me.UnidadesTableAdapter.Fill(Me.DataSet_Prod_Serv.Unidades)
            'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Impuestos_Retenciones' Puede moverla o quitarla según sea necesario.
            Me.Impuestos_RetencionesTableAdapter.Fill(Me.DataSet_Prod_Serv.Impuestos_Retenciones)
            'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Productos' Puede moverla o quitarla según sea necesario.
            Me.ProductosTableAdapter.Fill(Me.DataSet_Prod_Serv.Productos)
            'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Proveedores' Puede moverla o quitarla según sea necesario.
            Me.ProveedoresTableAdapter.Fill(Me.DataSet_Prod_Serv.Proveedores)
            'TODO: esta línea de código carga datos en la tabla 'DataSet_Prod_Serv.Familias' Puede moverla o quitarla según sea necesario.
            Me.FamiliasTableAdapter.Fill(Me.DataSet_Prod_Serv.Familias)
            If _Editar = False Then
                If _EnTarea Then
                    'Llenado tablas de erp_tareas pendientes
                    Me.ProductosTableAdapter1.Fill(Me.ERP_BDDataSet.Productos, _IDPRODUCTO)
                    Me.Productos_NombresTableAdapter1.Fill(Me.ERP_BDDataSet.Productos_Nombres, _IDPRODUCTO)
                    Me.Productos_ProveedorTableAdapter1.Fill(Me.ERP_BDDataSet.Productos_Proveedor, _IDPRODUCTO)

                    For i As Integer = 0 To Me.ERP_BDDataSet.Productos_Nombres.Rows.Count - 1
                        Me.dgvProductos.Rows.Add()
                        Me.dgvProductos.Rows(i).Cells(0).Value = Me.ERP_BDDataSet.Productos_Nombres(i)(1)
                        Me.dgvProductos.Rows(i).Cells(1).Value = Me.ERP_BDDataSet.Productos_Nombres(i)(2)
                        Me.dgvProductos.Rows(i).Cells(2).Value = Me.ERP_BDDataSet.Productos_Nombres(i)(6)
                        Me.dgvProductos.Rows(i).Cells(3).Value = Me.ERP_BDDataSet.Productos_Nombres(i)(3)
                        'Me.dgvProductos.Rows(i).Cells(4).Value = Me.DataSet_Prod_Serv.Productos_Nombres(i)(5)
                    Next
                    Dim product() As DataRow = Me.ERP_BDDataSet.Productos.Select("IDPRODUCTO=" & _IDPRODUCTO)
                    cbPeso.SelectedValue = product.ElementAt(0).Item(0)
                    cbFamilia1.SelectedValue = product.ElementAt(0).Item(1)
                    cbFamilia2.SelectedValue = product.ElementAt(0).Item(2)
                    cbFamilia3.SelectedValue = product.ElementAt(0).Item(3)
                    cbImpuesto.SelectedValue = product.ElementAt(0).Item(4)
                    cbMetodo.SelectedText = product.ElementAt(0).Item(19)
                    picFoto.ImageLocation = Application.StartupPath & "\fotos_Productos\" & product.ElementAt(0).Item(5)
                    picFoto.LoadAsync()
                    txtPeso.Text = product.ElementAt(0).Item(7)
                    txtCostoEstandar.Text = product.ElementAt(0).Item(8)
                    cbSegmento1.Text = product.ElementAt(0).Item(9)
                    cbSegmento2.Text = product.ElementAt(0).Item(10)
                    cbSegmento3.Text = product.ElementAt(0).Item(11)
                    txtPrecioVenta.Text = product.ElementAt(0).Item(12)
                    intMeses.Value = product.ElementAt(0).Item(15)
                    intKm.Value = product.ElementAt(0).Item(16)
                    If product.ElementAt(0).Item(17) = 1 Then
                        sbSeguimiento.Value = True
                    End If
                    For i As Integer = 0 To Me.ERP_BDDataSet.Productos_Proveedor.Rows.Count - 1
                        Me.dgvProveedor.Rows.Add()
                        Me.dgvProveedor.Rows(i).Cells(0).Value = Me.ProveedoresTableAdapter.Scalar_RazonSocial(Me.ERP_BDDataSet.Productos_Proveedor(i)(1))
                        Me.dgvProveedor.Rows(i).Cells(1).Value = Me.ERP_BDDataSet.Productos_Proveedor(i)(2)
                        Me.dgvProveedor.Rows(i).Cells(2).Value = Me.ERP_BDDataSet.Productos_Proveedor(i)(3)
                        Me.dgvProveedor.Rows(i).Cells(3).Value = Me.ERP_BDDataSet.Productos_Proveedor(i)(4)
                        'Me.dgvProveedor.Rows(i).Cells(5).Value = Me.DataSet_Prod_Serv.Productos_Proveedor(i)(5)
                        Me.dgvProveedor.Rows(i).Cells(4).Value = Me.ERP_BDDataSet.Productos_Proveedor(i)(1)
                    Next
                    Dim Impuest() As DataRow = Me.DataSet_Prod_Serv.Impuestos_Retenciones.Select("IDIMP_RET=" & product.ElementAt(0).Item(4))
                    lbPorcentaje2.Text = Impuest.ElementAt(0).Item(2)
                    If Impuest.ElementAt(0).Item(3) = 0 Then
                        lbTipo2.Text = "IMPUESTO"
                    Else
                        lbTipo2.Text = "RETENCIÓN"
                    End If
                    btnSiguiente.Visible = True
                    ExpandablePanel1.Expanded = True
                Else
                    cbPeso.SelectedIndex = 0
                    cbImpuesto_SelectedIndexChanged(Nothing, Nothing)
                    cbTipo.SelectedIndex = 0
                    cbModeloBus.SelectedIndex = 0
                    dgvProductos.DataSource = Nothing
                    cbSegmento1.Text = ""
                    cbSegmento2.Text = ""
                    cbSegmento3.Text = ""
                End If
            Else
                Me.Productos_NombresTableAdapter.Fill(Me.DataSet_Prod_Serv.Productos_Nombres, _IDPRODUCTO)
                For i As Integer = 0 To Me.DataSet_Prod_Serv.Productos_Nombres.Rows.Count - 1
                    Me.dgvProductos.Rows.Add()
                    Me.dgvProductos.Rows(i).Cells(0).Value = Me.DataSet_Prod_Serv.Productos_Nombres(i)(2)
                    Me.dgvProductos.Rows(i).Cells(1).Value = Me.DataSet_Prod_Serv.Productos_Nombres(i)(3)
                    Me.dgvProductos.Rows(i).Cells(2).Value = Me.DataSet_Prod_Serv.Productos_Nombres(i)(1)
                    Me.dgvProductos.Rows(i).Cells(3).Value = Me.DataSet_Prod_Serv.Productos_Nombres(i)(4)
                    Me.dgvProductos.Rows(i).Cells(4).Value = Me.DataSet_Prod_Serv.Productos_Nombres(i)(0)
                Next
                Dim product() As DataRow = Me.DataSet_Prod_Serv.Productos.Select("IDPRODUCTO=" & _IDPRODUCTO)
                cbPeso.SelectedValue = product.ElementAt(0).Item(1)
                cbFamilia1.SelectedValue = product.ElementAt(0).Item(2)
                cbFamilia2.SelectedValue = product.ElementAt(0).Item(3)
                cbFamilia3.SelectedValue = product.ElementAt(0).Item(4)
                cbImpuesto.SelectedValue = product.ElementAt(0).Item(5)
                cbMetodo.SelectedText = product.ElementAt(0).Item(6)
                picFoto.ImageLocation = Application.StartupPath & "\fotos_Productos\" & product.ElementAt(0).Item(7)
                picFoto.LoadAsync()
                txtPeso.Text = product.ElementAt(0).Item(9)
                txtCostoEstandar.Text = product.ElementAt(0).Item(10)
                cbSegmento1.Text = product.ElementAt(0).Item(11)
                cbSegmento2.Text = product.ElementAt(0).Item(12)
                cbSegmento3.Text = product.ElementAt(0).Item(13)
                txtPrecioVenta.Text = product.ElementAt(0).Item(14)
                intMeses.Value = product.ElementAt(0).Item(17)
                intKm.Value = product.ElementAt(0).Item(18)
                If product.ElementAt(0).Item(19) = 1 Then
                    sbSeguimiento.Value = True
                End If
                Me.Productos_ProveedorTableAdapter.Fill_IDPRODUCTO(Me.DataSet_Prod_Serv.Productos_Proveedor, _IDPRODUCTO)
                For i As Integer = 0 To Me.DataSet_Prod_Serv.Productos_Proveedor.Rows.Count - 1
                    Me.dgvProveedor.Rows.Add()
                    Me.dgvProveedor.Rows(i).Cells(0).Value = Me.ProveedoresTableAdapter.Scalar_RazonSocial(Me.DataSet_Prod_Serv.Productos_Proveedor(i)(2))
                    Me.dgvProveedor.Rows(i).Cells(1).Value = Me.DataSet_Prod_Serv.Productos_Proveedor(i)(3)
                    Me.dgvProveedor.Rows(i).Cells(2).Value = Me.DataSet_Prod_Serv.Productos_Proveedor(i)(4)
                    Me.dgvProveedor.Rows(i).Cells(3).Value = Me.DataSet_Prod_Serv.Productos_Proveedor(i)(5)
                    Me.dgvProveedor.Rows(i).Cells(5).Value = Me.DataSet_Prod_Serv.Productos_Proveedor(i)(0)
                    Me.dgvProveedor.Rows(i).Cells(4).Value = Me.DataSet_Prod_Serv.Productos_Proveedor(i)(1)
                Next
                Dim Impuest() As DataRow = Me.DataSet_Prod_Serv.Impuestos_Retenciones.Select("IDIMP_RET=" & product.ElementAt(0).Item(5))
                lbPorcentaje2.Text = Impuest.ElementAt(0).Item(2)
                If Impuest.ElementAt(0).Item(3) = 0 Then
                    lbTipo2.Text = "IMPUESTO"
                Else
                    lbTipo2.Text = "RETENCIÓN"
                End If
                btnSiguiente.Visible = True
                ExpandablePanel1.Expanded = True
            End If
            'Todo esto son los colores de los controles que por alguna razón no los toma en sus propiedades del diseñador ಥ_ಥ 
            Me.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            lbArticulo.ForeColor = Color.DarkGray  'Los controles no cambian su foreColor por alguna extraña razón ಥ_ಥ
            lbP.ForeColor = Color.DarkGray

            lblNombre.ForeColor = SystemColors.MenuHighlight
            lbSub1.ForeColor = SystemColors.MenuHighlight
            lbSub2.ForeColor = SystemColors.MenuHighlight
            lbSub3.ForeColor = SystemColors.MenuHighlight

            lbSub5.ForeColor = SystemColors.MenuHighlight
            lbSub6.ForeColor = SystemColors.MenuHighlight
            PageSlider1.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            PageSliderPage1.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            txtNombre.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            txtTipo_Identificacion.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            txtDescripcion.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            txtCodigo.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            txtPrecioCompra.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            txtPeso.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            txtCostoEstandar.BackColor = StyleManager1.MetroColorParameters.CanvasColor
            txtPrecioVenta.BackColor = StyleManager1.MetroColorParameters.CanvasColor

            slideOpciones.BackColor = Color.Black
            panelOpciones.BackColor = Color.Black

            slideOpciones.IsOpen = False
            sliderImpuesto.IsOpen = False

            Tipo_Identificacion()

            Dim MySource As New AutoCompleteStringCollection()
            For Each Str As String In File.ReadAllLines("Config\Servicios_Nom.txt", Encoding.Default)
                MySource.Add(Str)
            Next
            With txtNombre
                .AutoCompleteCustomSource = MySource
                .AutoCompleteSource = AutoCompleteSource.CustomSource
            End With
        Catch ex As Exception
            ToastNotification.Show(Me, ex.Message, My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
        End Try
    End Sub

    Private Sub btnSiguiente_Click(sender As Object, e As EventArgs) Handles btnSiguiente.Click
        PageSlider1.SelectedPage = PageSliderPage2
    End Sub

    Private Sub btnFoto_Click(sender As Object, e As EventArgs) Handles btnFoto.Click
        OpenFileDialog1.ShowDialog()
        If Not OpenFileDialog1.FileName = "Imagen" Then
            picFoto.Load(OpenFileDialog1.FileName)
        End If
    End Sub

    Private Sub ButtonItem1_Click(sender As Object, e As EventArgs) Handles ButtonItem1.Click
        slideOpciones.IsOpen = False
    End Sub

    Private Sub btnMostrarOpciones_Click(sender As Object, e As EventArgs) Handles btnMostrarOpciones.Click
        slideOpciones.IsOpen = True
    End Sub

    Private Sub txt_TextChanged(sender As Object, e As EventArgs) Handles txtNombre.TextChanged, txtDescripcion.TextChanged, txtCodigo.TextChanged, _
        txtPrecioCompra.TextChanged, txtPeso.TextChanged, txtCostoEstandar.TextChanged, txtPrecioVenta.TextChanged, txtNomRetencion.TextChanged
        Dim txt As DevComponents.DotNetBar.Controls.TextBoxX = DirectCast(sender, DevComponents.DotNetBar.Controls.TextBoxX)
        If txt Is txtNombre Then
            If txt.Text <> "" Then
                lbNombre.Visible = True
            Else
                lbNombre.Visible = False
            End If
        End If
        If txt Is txtDescripcion Then
            If txt.Text <> "" Then
                lbDescripcion.Visible = True
            Else
                lbDescripcion.Visible = False
            End If
        End If
        If txt Is txtCodigo Then
            If txt.Text <> "" Then
                lbCodigo.Visible = True
            Else
                lbCodigo.Visible = False
            End If
        End If
        If txt Is txtPrecioCompra Then
            If txt.Text <> "" Then
                lbPrecio.Visible = True
            Else
                lbPrecio.Visible = False
            End If
        End If
        If txt Is txtPeso Then
            If txt.Text <> "" Then
                lbUnidad.Visible = True
            Else
                lbUnidad.Visible = False
            End If
        End If
        If txt Is txtCostoEstandar Then
            If txt.Text <> "" Then
                lbCostoEstandar.Visible = True
            Else
                lbCostoEstandar.Visible = False
            End If
        End If
        If txt Is txtPrecioVenta Then
            If txt.Text <> "" Then
                lbPrecioVenta.Visible = True
            Else
                lbPrecioVenta.Visible = False
            End If
        End If
        If txt Is txtNomRetencion Then
            If txt.Text <> "" Then
                lbNombreImp.Visible = True
            Else
                lbNombreImp.Visible = False
            End If
        End If

    End Sub

    Private Sub txt_Enter(sender As Object, e As EventArgs) Handles txtNombre.Enter, txtDescripcion.Enter, txtCodigo.Enter, txtPrecioCompra.Enter, txtCostoEstandar.Enter, txtNomRetencion.Enter, txtPeso.Enter, txtPrecioCompra.Enter, txtPrecioVenta.Enter, txtTipo_Identificacion.Enter
        Dim txt As DevComponents.DotNetBar.Controls.TextBoxX = DirectCast(sender, DevComponents.DotNetBar.Controls.TextBoxX)
        txt.Border.BorderColor2 = SystemColors.MenuHighlight
    End Sub

    Private Sub txt_Leave(sender As Object, e As EventArgs) Handles txtNombre.Leave, txtDescripcion.Leave, txtCodigo.Leave, txtPrecioCompra.Leave, txtCostoEstandar.Leave, txtNomRetencion.Leave, txtPeso.Leave, txtPrecioCompra.Leave, txtPrecioVenta.Leave, txtTipo_Identificacion.Leave
        Dim txt As DevComponents.DotNetBar.Controls.TextBoxX = DirectCast(sender, DevComponents.DotNetBar.Controls.TextBoxX)
        txt.Border.BorderColor2 = Nothing
        If txt Is txtNombre And Not txtNombre.Text = Nothing And txtNombre.TextLength > 3 Then
            g = Guid.NewGuid
            Dim Cod As String = txtNombre.Text.Substring(0, 3).ToUpper.Trim()
            Cod = Cod & "-" & g.ToString.Substring(5, 5).ToUpper
            txtCodigo.Text = Cod
            Generar_QR(Cod)
            slideOpciones.IsOpen = True
            picQR.Enabled = True
        End If

        If txt Is txtCodigo And Not txtCodigo.Text = Nothing Then
            Generar_QR(txtCodigo.Text)
        End If

        If txt Is txtNomRetencion Then
            Dim foundRows() As DataRow
            foundRows = Me.DataSet_Prod_Serv.Tables("Impuestos_Retenciones").Select("Nombre='" & txtNomRetencion.Text & "'")
            If foundRows.Length > 0 Then
                ToastNotification.Show(Me, "El nombre del impuesto/retención que desea agregar ya existe.", My.Resources.appbar_cone, 3000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
                txtNomRetencion.Text = Nothing
            End If
        End If
    End Sub

    Public Sub Generar_QR(ByVal codigo As String)
        Dim qrCodeEncoder As QRCodeEncoder = New QRCodeEncoder
        qrCodeEncoder.QRCodeEncodeMode = Codec.QRCodeEncoder.ENCODE_MODE.BYTE
        qrCodeEncoder.QRCodeScale = 5
        qrCodeEncoder.QRCodeErrorCorrect = Codec.QRCodeEncoder.ERROR_CORRECTION.H
        qrCodeEncoder.QRCodeVersion = 0
        picQR.Image = qrCodeEncoder.Encode(codigo, System.Text.Encoding.UTF8)
    End Sub

    Private Sub btnAgregar_Click(sender As Object, e As EventArgs) Handles btnAgregar.Click
        Try
            If PageSlider1.SelectedPageIndex = 0 Then
                If sliderImpuesto.IsOpen Then
                    If Valida_TXT(txtNomRetencion) Then
                        Exit Sub
                    End If
                    Me.Impuestos_RetencionesTableAdapter.Insert(txtNomRetencion.Text, intPorcentaje.Value, cbTipo.SelectedIndex)
                    sliderImpuesto.IsOpen = False
                    slideOpciones.IsOpen = False
                    Me.DataSet_Prod_Serv.Impuestos_Retenciones.Clear()
                    Me.Impuestos_RetencionesTableAdapter.Fill(Me.DataSet_Prod_Serv.Impuestos_Retenciones)
                    txtNomRetencion.Text = ""
                    intPorcentaje.Value = 0
                    ToastNotification.Show(Me, "Impuesto/Retención agregado al catalogo.", My.Resources.add2, 3000, eToastGlowColor.Blue, eToastPosition.BottomCenter)
                    Exit Sub
                End If

                fila = dgvProductos.RowCount
                If fila >= 3 Then
                    ToastNotification.Show(Me, "Ya existen 3 nombres para este servicio.", My.Resources.appbar_cone, 5000, eToastGlowColor.Orange, eToastPosition.MiddleCenter)
                    Exit Sub
                End If

                If pronom.Buscar_CodNomExis(txtCodigo.Text, txtNombre.Text) > 0 Then
                    ToastNotification.Show(Me, "Este nombre o/y codigo ya esta registrado.", My.Resources.appbar_cone, 5000, eToastGlowColor.Orange, eToastPosition.MiddleCenter)
                    Exit Sub
                End If


                'If fila < 1 And txtTipo_Identificacion.Text <> "Proveedor" Then
                'ToastNotification.Show(Me, "Primero debe de capturar el nombre del producto como lo conoce el proveedor.", My.Resources.appbar_cone, 5000, eToastGlowColor.Orange, eToastPosition.MiddleCenter)
                'Exit Sub
                'End If

                If Valida_TXT(txtNombre) Then
                    ExpandablePanel1.Expanded = False
                    Exit Sub
                End If
                If Valida_TXT(txtCodigo) Then
                    ExpandablePanel1.Expanded = False
                    Exit Sub
                End If

                If Valida_TXT(txtTipo_Identificacion) Then
                    ExpandablePanel1.Expanded = False
                    Exit Sub
                End If
                dgvProductos.Rows.Add()
                dgvProductos.Rows(fila).Cells(0).Value = txtNombre.Text
                dgvProductos.Rows(fila).Cells(1).Value = txtDescripcion.Text
                dgvProductos.Rows(fila).Cells(2).Value = txtCodigo.Text
                dgvProductos.Rows(fila).Cells(3).Value = txtTipo_Identificacion.Text
                txtNombre.Text = Nothing
                txtDescripcion.Text = Nothing
                txtCodigo.Text = Nothing
                picQR.Image = Nothing
                ExpandablePanel1.Expanded = True
                btnSiguiente.Visible = True
                PageSlider1.PageMouseDragEnabled = True
                picQR.Enabled = False
            ElseIf PageSlider1.SelectedPageIndex = 1 Then
                btnAgregarProPro_Click(sender, e)
            End If
            Tipo_Identificacion()
        Catch ex As Exception
            ToastNotification.Show(Me, ex.Message, My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
        End Try
    End Sub

    Function Valida_CB(sender As Object) As Boolean
        Dim txt As DevComponents.DotNetBar.Controls.ComboBoxEx = DirectCast(sender, DevComponents.DotNetBar.Controls.ComboBoxEx)
        If txt.Text = Nothing Then
            Highlighter1.SetHighlightOnFocus(txt, True)
            txt.Focus()
            Return True
        Else
            Highlighter1.SetHighlightOnFocus(txt, False)
            Return False
        End If
    End Function

    Function Valida_TXT(sender As Object) As Boolean
        Dim txt As DevComponents.DotNetBar.Controls.TextBoxX = DirectCast(sender, DevComponents.DotNetBar.Controls.TextBoxX)
        If txt.Text = Nothing Then
            Highlighter1.SetHighlightOnFocus(txt, True)
            txt.Focus()
            Return True
        Else
            Highlighter1.SetHighlightOnFocus(txt, False)
            Return False
        End If
    End Function

    Private Sub btnAgregarProPro_Click(sender As Object, e As EventArgs)
        If Valida_CB(cbProveedor) Then
            Exit Sub
        End If
        If Valida_TXT(txtPrecioCompra) Then
            Exit Sub
        End If

        fila_propro = dgvProveedor.RowCount

        dgvProveedor.Rows.Add()
        dgvProveedor.Rows(fila_propro).Cells(0).Value = cbProveedor.Text
        dgvProveedor.Rows(fila_propro).Cells(1).Value = txtPrecioCompra.Text
        dgvProveedor.Rows(fila_propro).Cells(2).Value = intTiempoEntrega.Value
        dgvProveedor.Rows(fila_propro).Cells(3).Value = intGarantia.Value
        dgvProveedor.Rows(fila_propro).Cells(4).Value = cbProveedor.SelectedValue

        cbProveedor.Text = Nothing
        txtPrecioCompra.Text = Nothing
        intTiempoEntrega.Text = Nothing
        intGarantia.Text = Nothing
    End Sub

    Private Sub cbImpuesto_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbImpuesto.SelectedIndexChanged
        Try
            lbPorcentaje2.Text = Me.DataSet_Prod_Serv.Impuestos_Retenciones.Item(cbImpuesto.SelectedIndex).PORCENTAJE
            If Me.DataSet_Prod_Serv.Impuestos_Retenciones.Item(cbImpuesto.SelectedIndex).TIPO = 0 Then
                lbTipo2.Text = "Impuesto"
            Else
                lbTipo2.Text = "Retención"
            End If
        Catch ex As Exception
        End Try
    End Sub

    Private Sub ExpandablePanel1_ExpandedChanged(sender As Object, e As DevComponents.DotNetBar.ExpandedChangeEventArgs) Handles ExpandablePanel1.ExpandedChanged
        fila = dgvProductos.RowCount
        If fila >= 3 Then
            ExpandablePanel1.ExpandButtonVisible = False
            ExpandablePanel1.ExpandOnTitleClick = False
        Else
            ExpandablePanel1.ExpandButtonVisible = True
            ExpandablePanel1.ExpandOnTitleClick = True
        End If
    End Sub

    Private Sub dgvProductos_RowsRemoved(sender As Object, e As DataGridViewRowsRemovedEventArgs) Handles dgvProductos.RowsRemoved
        ExpandablePanel1.ExpandButtonVisible = True
        ExpandablePanel1.ExpandOnTitleClick = True
        If dgvProductos.RowCount = 0 Then
            btnSiguiente.Visible = False
            PageSlider1.PageMouseDragEnabled = False
            ExpandablePanel1.Expanded = False
        End If
        Tipo_Identificacion()
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        'If EstadoRed() = False Then
        'Status.Visible = True
        'Else
        'Status.Visible = False
        'End If
    End Sub

    Private Sub PageSlider1_SelectedPageChanged(sender As Object, e As EventArgs) Handles PageSlider1.SelectedPageChanged
        If PageSlider1.SelectedPageIndex = 1 Then
            lbArticulo.Text = dgvProductos.Rows(0).Cells(0).Value.ToString.Trim()
            btnFoto.Visible = True
            btnAgregar.Visible = True
            slideOpciones.IsOpen = True
        ElseIf PageSlider1.SelectedPageIndex = 0 Then
            btnAgregar.Visible = True
            btnFoto.Visible = False
            slideOpciones.IsOpen = False
            slideOpciones.IsOpen = True
        End If
    End Sub

    Private Sub txtPeso_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtPeso.KeyPress
        NumeroDec(e, Me.txtPeso)
    End Sub

    Private Sub txtPrecioCompra_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtPrecioCompra.KeyPress
        NumeroDec(e, txtPrecioCompra)
    End Sub

    Private Sub txtCostoEstandar_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtCostoEstandar.KeyPress
        NumeroDec(e, txtCostoEstandar)
    End Sub

    Private Sub txtPrecioVenta_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtPrecioVenta.KeyPress
        NumeroDec(e, txtPrecioVenta)
    End Sub

    Private Sub Ocultar_Panel() Handles btnSiguiente.Click, Me.Click, PageSliderPage1.Click, PageSliderPage2.Click, PageSliderPage3.Click
        slideOpciones.IsOpen = False
    End Sub

    Private Sub cbComprobar_Leave(sender As Object, e As EventArgs) Handles cbFamilia1.Leave, cbFamilia2.Leave, cbFamilia3.Leave, cbProveedor.Leave
        Dim cb As DevComponents.DotNetBar.Controls.ComboBoxEx = DirectCast(sender, DevComponents.DotNetBar.Controls.ComboBoxEx)
        If Not cb.FindStringExact(cb.Text) > -1 Then
            cb.SelectedIndex = 0
        End If
    End Sub

    Private Sub btnCerraSlideImp_Click(sender As Object, e As EventArgs) Handles btnCerraSlideImp.Click
        sliderImpuesto.IsOpen = False
    End Sub

    Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click
        sliderImpuesto.IsOpen = True
        slideOpciones.IsOpen = True
        cbTipo.SelectedIndex = 0
    End Sub


    Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
        If txtPeso.Text = "" Then
            txtPeso.Text = 0
        End If
        If txtCostoEstandar.Text = "" Then
            txtCostoEstandar.Text = 0
        End If
        If txtPrecioVenta.Text = "" Then
            txtPrecioVenta.Text = 0
        End If
        If dgvProductos.Rows.Count < 1 Then
            ToastNotification.Show(Me, "Debe capturar cuando menos un nombre de producto", My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
            Exit Sub
        End If
        Try
            Dim image As Image = picFoto.Image
            Dim imagen As New Bitmap(image)
            imagen.Save(Application.StartupPath & "\fotos_Productos\" & dgvProductos.Rows(0).Cells(2).Value.ToString.Trim & ".jpg", image.RawFormat)
            imagen.Dispose()
            If _Editar = False Then
                producto.Insert(cbPeso.SelectedValue, cbFamilia1.SelectedValue, cbFamilia2.SelectedValue, cbFamilia3.SelectedValue, cbImpuesto.SelectedValue, cbMetodo.Text, _
                             dgvProductos.Rows(0).Cells(2).Value & ".jpg", "En catalogo", Decimal.Parse(txtPeso.Text), Decimal.Parse(txtCostoEstandar.Text), cbSegmento1.Text, cbSegmento2.Text, _
                             cbSegmento3.Text, Decimal.Parse(txtPrecioVenta.Text), 0, 0, intMeses.Value, intKm.Value, IIf(sbSeguimiento.Value = True, 1, 0), cbModeloBus.SelectedIndex)
                For Each fila As DataGridViewRow In Me.dgvProductos.Rows
                    pronom.Insert(dgvProductos.Rows(fila.Index).Cells(2).Value, dgvProductos.Rows(fila.Index).Cells(0).Value, dgvProductos.Rows(fila.Index).Cells(1).Value, _
                                  dgvProductos.Rows(fila.Index).Cells(3).Value, producto.Ultimo_ID)
                Next

                For Each fila As DataGridViewRow In Me.dgvProveedor.Rows
                    propro.Insert(producto.Ultimo_ID, Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(4).Value), Decimal.Parse(dgvProveedor.Rows(fila.Index).Cells(1).Value), Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(2).Value), _
                                  Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(3).Value))
                Next
                ToastNotification.Show(Me, "Capturado con exito", My.Resources.add1, 3000, eToastGlowColor.Blue, eToastPosition.TopCenter)
            Else
                If MessageBoxEx.Show("La acción sera definitiva, desea continuar?", "Atención", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Cancel Then
                    Exit Sub
                Else
                    producto.Update(cbPeso.SelectedValue, cbFamilia1.SelectedValue, cbFamilia2.SelectedValue, cbFamilia3.SelectedValue, cbImpuesto.SelectedValue, cbMetodo.Text.Trim, _
                                dgvProductos.Rows(0).Cells(2).Value.ToString.Trim & ".jpg", "En catalogo", Decimal.Parse(txtPeso.Text.Trim), Decimal.Parse(txtCostoEstandar.Text.Trim), cbSegmento1.Text.Trim, cbSegmento2.Text.Trim, _
                                cbSegmento3.Text.Trim, Decimal.Parse(txtPrecioVenta.Text.Trim), 0, 0, intMeses.Value, intKm.Value, IIf(sbSeguimiento.Value = True, 1, 0), cbModeloBus.SelectedIndex, _IDPRODUCTO)

                    For Each fila As DataGridViewRow In Me.dgvProductos.Rows
                        If dgvProductos.Rows(fila.Index).Cells(4).Value Is Nothing Then
                            pronom.Insert(dgvProductos.Rows(fila.Index).Cells(2).Value.ToString.Trim, dgvProductos.Rows(fila.Index).Cells(0).Value.ToString.Trim, dgvProductos.Rows(fila.Index).Cells(1).Value.ToString.Trim, _
                                        dgvProductos.Rows(fila.Index).Cells(3).Value.ToString.Trim, _IDPRODUCTO)
                        Else
                            pronom.Update(dgvProductos.Rows(fila.Index).Cells(2).Value.ToString.Trim, dgvProductos.Rows(fila.Index).Cells(0).Value.ToString.Trim, dgvProductos.Rows(fila.Index).Cells(1).Value.ToString.Trim, _
                                          dgvProductos.Rows(fila.Index).Cells(3).Value.ToString.Trim, _IDPRODUCTO, dgvProductos.Rows(fila.Index).Cells(4).Value)
                        End If
                    Next

                    For Each fila As DataGridViewRow In Me.dgvProveedor.Rows
                        If dgvProveedor.Rows(fila.Index).Cells(5).Value Is Nothing Then
                            propro.Insert(_IDPRODUCTO, Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(4).Value), Decimal.Parse(dgvProveedor.Rows(fila.Index).Cells(1).Value), Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(2).Value), _
                                     Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(3).Value))
                        Else
                            propro.Update(Decimal.Parse(dgvProveedor.Rows(fila.Index).Cells(1).Value), Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(2).Value), _
                                          Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(3).Value), dgvProveedor.Rows(fila.Index).Cells(5).Value)
                        End If
                    Next
                    ToastNotification.Show(Me, "Actualizado con exito", My.Resources.add2, 3000, eToastGlowColor.Blue, eToastPosition.TopCenter)
                End If
            End If
            If _EnTarea Then
                producto_erp.Delete(_IDPRODUCTO)
                max_erp.Delete(_IDPRODUCTO)
                pronom_erp.Delete(_IDPRODUCTO)
                propro_erp.Delete(_IDPRODUCTO)
                tareas_erp.Delete(_IDPRODUCTO)
                FrmMain.Notificacion_tareas()
                _EnTarea = False
                _Editar = False
            End If
            If _Editar = False Then
                For Each ctrl As Control In PageSliderPage1.Controls
                    If TypeOf ctrl Is DevComponents.DotNetBar.Controls.TextBoxX Then
                        CType(ctrl, DevComponents.DotNetBar.Controls.TextBoxX).Text = String.Empty
                    ElseIf TypeOf ctrl Is DevComponents.DotNetBar.Controls.ComboBoxEx Then
                        CType(ctrl, DevComponents.DotNetBar.Controls.ComboBoxEx).SelectedIndex = 0
                    ElseIf TypeOf ctrl Is DevComponents.Editors.IntegerInput Then
                        CType(ctrl, DevComponents.Editors.IntegerInput).Value = 0
                    End If
                Next
                For Each ctrl As Control In PageSliderPage2.Controls
                    If TypeOf ctrl Is DevComponents.DotNetBar.Controls.TextBoxX Then
                        CType(ctrl, DevComponents.DotNetBar.Controls.TextBoxX).Text = String.Empty
                    ElseIf TypeOf ctrl Is DevComponents.DotNetBar.Controls.ComboBoxEx Then
                        CType(ctrl, DevComponents.DotNetBar.Controls.ComboBoxEx).SelectedIndex = 0
                    ElseIf TypeOf ctrl Is DevComponents.Editors.IntegerInput Then
                        CType(ctrl, DevComponents.Editors.IntegerInput).Value = 0
                    End If
                Next
                For Each ctrl As Control In PageSliderPage3.Controls
                    If TypeOf ctrl Is DevComponents.DotNetBar.Controls.TextBoxX Then
                        CType(ctrl, DevComponents.DotNetBar.Controls.TextBoxX).Text = String.Empty
                    ElseIf TypeOf ctrl Is DevComponents.DotNetBar.Controls.ComboBoxEx Then
                        CType(ctrl, DevComponents.DotNetBar.Controls.ComboBoxEx).SelectedIndex = 0
                    ElseIf TypeOf ctrl Is DevComponents.Editors.IntegerInput Then
                        CType(ctrl, DevComponents.Editors.IntegerInput).Value = 0
                    End If
                Next
            End If
        Catch ex As Exception
            ToastNotification.Show(Me, ex.Message, My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
        End Try
    End Sub


    Private Sub dgvProveedor_UserDeletingRow(sender As Object, e As DataGridViewRowCancelEventArgs) Handles dgvProveedor.UserDeletingRow
        Try
            If MessageBoxEx.Show("La acción de eliminar sera definitiva. ¿Está seguro que desea eliminar este registro?", "Atención", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Cancel Then
                e.Cancel = True
            Else
                If _Editar Then
                    propro.Delete(Me.dgvProveedor.CurrentRow.Cells(5).Value)
                End If
            End If
        Catch ex As Exception
            ToastNotification.Show(Me, ex.Message, My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
        End Try
    End Sub

    Private Sub dgvProductos_UserDeletingRow(sender As Object, e As DataGridViewRowCancelEventArgs) Handles dgvProductos.UserDeletingRow
        Try
            If MessageBoxEx.Show("La acción de eliminar sera definitiva. ¿Está seguro que desea eliminar este registro?", "Atención", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Cancel Then
                e.Cancel = True
            Else
                If _Editar Then
                    pronom.Delete(Me.dgvProductos.CurrentRow.Cells(4).Value)
                End If
            End If
        Catch ex As Exception
            ToastNotification.Show(Me, ex.Message, My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
        End Try
    End Sub

    Private Sub ButtonItem10_Click(sender As Object, e As EventArgs) Handles btnTareaPendiente.Click
        If txtPeso.Text = "" Then
            txtPeso.Text = 0
        End If
        If txtCostoEstandar.Text = "" Then
            txtCostoEstandar.Text = 0
        End If
        If txtPrecioVenta.Text = "" Then
            txtPrecioVenta.Text = 0
        End If
        Try
            If _Editar Then
                Me.Close()
            Else
                Dim image As Image = picFoto.Image
                Dim imagen As New Bitmap(image)
                imagen.Save(Application.StartupPath & "\fotos_Productos\" & dgvProductos.Rows(0).Cells(2).Value.ToString.Trim & ".jpg", image.RawFormat)
                imagen.Dispose()
                _IDPRODUCTO = producto_erp.IdProducto + 1
                producto_erp.Insert(cbPeso.SelectedValue, cbFamilia1.SelectedValue, cbFamilia2.SelectedValue, cbFamilia3.SelectedValue, cbImpuesto.SelectedValue, _
                               dgvProductos.Rows(0).Cells(2).Value.ToString.Trim & ".jpg", "Pendiente", Decimal.Parse(txtPeso.Text), txtCostoEstandar.Text, cbSegmento1.Text, cbSegmento2.Text, _
                              cbSegmento3.Text, txtPrecioVenta.Text, 0, 0, intMeses.Value, intKm.Value, IIf(sbSeguimiento.Value = True, 1, 0), _IDPRODUCTO, cbMetodo.Text)
                For Each fila As DataGridViewRow In Me.dgvProductos.Rows
                    pronom_erp.Insert(dgvProductos.Rows(fila.Index).Cells(2).Value, dgvProductos.Rows(fila.Index).Cells(0).Value.ToString.Trim, dgvProductos.Rows(fila.Index).Cells(1).Value.ToString.Trim, _
                                  dgvProductos.Rows(fila.Index).Cells(3).Value.ToString.Trim, _IDPRODUCTO, 0)
                Next

                For Each fila As DataGridViewRow In Me.dgvProveedor.Rows
                    propro_erp.Insert(_IDPRODUCTO, Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(4).Value), Decimal.Parse(dgvProveedor.Rows(fila.Index).Cells(1).Value), Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(2).Value), _
                                  Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(3).Value), Integer.Parse(dgvProveedor.Rows(fila.Index).Cells(4).Value))
                Next
                tareas_erp.Insert(_IDPRODUCTO, "Servicio", _IDUSUARIO, Now.Date)
            End If
            FrmMain.Notificacion_tareas()
            Me.Close()
        Catch ex As Exception
            ToastNotification.Show(Me, ex.Message, My.Resources.appbar_cone, 5000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
        End Try
    End Sub

    Public Sub Tipo_Identificacion()
        If Me.dgvProductos.Rows.Count = 0 Then
            txtTipo_Identificacion.Text = "Proveedor"
        ElseIf Me.dgvProductos.Rows.Count = 1 Then
            txtTipo_Identificacion.Text = "Almacen"
        ElseIf Me.dgvProductos.Rows.Count = 2 Then
            txtTipo_Identificacion.Text = "Taller Mecanico"
        End If
    End Sub

End Class